//=========================================================================
// Copyright (C) 2024 The C++ Component Model(COMO) Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//=========================================================================

/*  =========================================================================
    zmtp_endpoint - endpoint base class

    Copyright (c) contributors as noted in the AUTHORS file.
    This file is part of libzmtp, the C ZMTP stack.

    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
    file, You can obtain one at http://mozilla.org/MPL/2.0/.
    =========================================================================
*/

#ifndef __ZMTP_ENDPOINT_H_INCLUDED__
#define __ZMTP_ENDPOINT_H_INCLUDED__

#ifdef __cplusplus
extern "C" {
#endif

struct zmtp_endpoint {
    void (*destroy) (struct zmtp_endpoint **self_p);
    int (*connect) (struct zmtp_endpoint *self);
    int (*listen) (struct zmtp_endpoint *self);
};

typedef struct zmtp_endpoint zmtp_endpoint_t;

void zmtp_endpoint_destroy(zmtp_endpoint_t **self_p);

int zmtp_endpoint_connect(zmtp_endpoint_t *self);

int zmtp_endpoint_listen(zmtp_endpoint_t *self);

#ifdef __cplusplus
}  // extern C
#endif

#endif
